home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Linux / Kubuntu 8.10 / kubuntu-8.10-desktop-i386.iso / casper / filesystem.squashfs / lib / partman / finish.d / 10clear_partitions next >
Text File  |  2008-10-29  |  3KB  |  98 lines

  1. #! /bin/sh
  2. # Remove critical files to ensure we don't end up with a mixed system.
  3.  
  4. . /lib/partman/lib/base.sh
  5.  
  6. failed () {
  7.     db_progress STOP
  8.     db_input critical partman-target/clear_partitions_failed || true
  9.     db_go || true
  10.     exit 1
  11. }
  12. count=0
  13. partitions=$(
  14. for dev in $DEVICES/*; do
  15.     [ -d "$dev" ] || continue
  16.     cd $dev
  17.     open_dialog PARTITIONS
  18.     while { read_line num id size type fs path name; [ "$id" ]; }; do
  19.         [ -f "$id/method" ] || continue
  20.         [ -f "$id/use_filesystem" ] || continue
  21.         [ -f "$id/mountpoint" ] || continue
  22.         [ "$fs" != free ] || continue
  23.         [ -f "$id/format" ] && continue
  24.         count=$(($count + 1))
  25.         mp="$(cat "$id/mountpoint")"
  26.         echo "$mp,$path"
  27.     done
  28.     close_dialog
  29. done | sort
  30. )
  31.  
  32. [ -n "$partitions" ] || exit 0
  33.  
  34. echo "Considering $partitions." | tr '\n' ' ' | logger -t clear_partitions
  35.  
  36. tmp="/mnt/tmpmount"
  37. mkdir -p "$tmp"
  38. template=partman-target/clear_partitions_progress
  39. db_progress START 0 $count ubiquity/install/title
  40. db_progress INFO $template
  41. to_delete=""
  42. for part in $partitions; do
  43.     mp="${part%,*}"
  44.     path="${part#*,}"
  45.     if [ "$mp" = "/" ]; then
  46.         mount $path $tmp || failed
  47.         for x in bin dev etc lib lib32 lib64 proc sbin usr var sys; do
  48.             [ -e "$tmp/$x" ] && (rm -rf "$tmp/$x" &&
  49.             logger -t clear_partitions "Removing $x from / ($path)." ||
  50.             failed)
  51.         done
  52.         for x in $tmp/initrd* $tmp/vmlinuz*; do
  53.             [ -e "$x" ] && (rm -rf "$x" || failed)
  54.         done
  55.         
  56.         # /home could be a symlink.
  57.         [ -f "$tmp/home" ] && (rm "$tmp/home" || failed)
  58.  
  59.         # / could have the wrong owner.
  60.         chown root:root $tmp
  61.         
  62.         # Preserve the UID, if possible.
  63.         db_get passwd/username || true
  64.         username="$RET"
  65.         if [ -n "$username" ] && [ -d "$tmp/home/$username" ]; then
  66.             db_set passwd/user-uid "$(stat -c %u "$tmp/home/$username")" || true
  67.             db_set passwd/user-gid "$(stat -c %g "$tmp/home/$username")" || true
  68.         fi
  69.         umount $tmp
  70.     elif [ "$mp" = "/home" ]; then
  71.         mount $path $tmp || failed
  72.         # Preserve the UID, if possible.
  73.         db_get passwd/username || true
  74.         username="$RET"
  75.         if [ -n "$username" ] && [ -d "$tmp/$username" ]; then
  76.             db_set passwd/user-uid "$(stat -c %u "$tmp/$username")" || true
  77.             db_set passwd/user-gid "$(stat -c %g "$tmp/$username")" || true
  78.         fi
  79.         umount $tmp
  80.     elif echo "$mp" | egrep -q "^/usr/local" || echo "$mp" | egrep -q "^/var/local"; then
  81.         logger -t clear_partitions "Skipping $mp ($path)."
  82.         continue
  83.     else
  84.         for x in bin dev etc lib lib32 lib64 proc sbin usr var sys; do
  85.             if echo "$mp" | egrep -q "^/$x(\$|/)"; then
  86.                 mount $path $tmp || failed
  87.                 logger -t clear_partitions "Removing everything from $mp ($path)."
  88.                 rm -rf $tmp/* || failed
  89.                 umount $tmp
  90.                 break
  91.             fi
  92.         done
  93.     fi
  94.     db_progress STEP 1
  95. done
  96. db_progress STOP
  97. rmdir $tmp
  98.